"""
# -*- coding: utf-8 -*-
# @Time    : 2023/5/31 16:49
# @Author  : 王摇摆
# @FileName: Data.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
import numpy as np
import matplotlib.pyplot as plt


def createTrainDatasWithNoise(W, start, end, size=10, noise=0.1):
    """
    创建带噪声的训练数据集
    args:
        W - 目标权重系数
        start - 最小值
        end - 最大值
        size - 训练数据集大小
        noise - 噪音大小
    return:
        X - 训练集特征值
        y - 训练集目标值
    """
    np.random.seed(42)
    X = np.random.uniform(start, end, (size, W.shape[0]))
    y = []
    for index in range(len(X)):
        num = np.random.randint(start, end)
        if np.random.random() > noise:
            y.append(X[index].dot(W))
        elif (num % 2) == 0:
            y.append(X[index].dot(W) + num)
        else:
            y.append(X[index].dot(W) - num)
    return X, np.array(y)


def buildSurface(W, start, end):
    """
    构建一个指定的二维平面
    args:
        W - 权重系数
        start - 最小值
        end - 最大值
        size - 组成线的点的数量
    return:
        x1 - x1集合
        y1 - y1集合
        z1 - z1集合
    """
    xx = np.arange(start, end, 0.5)
    yy = np.arange(start, end, 0.5)
    x1, y1 = np.meshgrid(xx, yy)
    z1 = W[0] * x1 + W[1] * y1
    return x1, y1, z1
